package starkuz.lg.controllers;

import starkuz.lg.dto.FormFieldsDto;
import starkuz.lg.dto.LoginDto;
import starkuz.lg.model.User;
import starkuz.lg.tools.ZipBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;


//контроллер для общих страниц и действий по всему ресурсу
@Controller
public class GeneratorController {


    @RequestMapping(value = {"/", "/index.html"}, method = RequestMethod.GET)
    public String start(Map model) throws IOException {
        LoginDto loginDto = null;
        Object obj = model.get("loginDto");
        if (obj != null) {
            loginDto = (LoginDto) obj;
        } else loginDto = new LoginDto();
        model.put("loginDto", loginDto);
        return "index";
    }

    @RequestMapping(value = "/templates.html")
    public String templates(HttpServletRequest req) {
        if (!isActiveUser(req)){
            return "redirect:index.html";
        }
        return "templates";
    }

    // blog
    @RequestMapping(value = "/blog.html")
    public String blog() {
        return "blog";
    }

    //для скачки архива (должно срабатывать по аякс запросу)
    @RequestMapping(value = "/download", method = RequestMethod.GET)
    public ModelAndView download(HttpServletRequest request,
                                 HttpServletResponse response, @RequestParam(value = "templId", required = false) Integer templId) throws Exception {
        HttpSession session = request.getSession();
        ServletContext servletContext = session.getServletContext();
        FormFieldsDto formFieldsDto = (FormFieldsDto) session.getAttribute("formZip");

        //тут создадим файл zip
        ZipBuilder.buildZip(servletContext, formFieldsDto, templId);

        //тут передаем созданный файл клиенту
        String realPathBuilder = servletContext.getRealPath("builder");
        File srcFile = new File(realPathBuilder + "/site.zip");
        FileInputStream inputStream = new FileInputStream(srcFile);

        response.setContentType("application/download");
        response.setContentLength((int) srcFile.length());
        response.setHeader("Content-Disposition", "attachment; filename=\"" + templId + "_" + srcFile.getName() + "\"");
        FileCopyUtils.copy(inputStream, response.getOutputStream());
        ZipBuilder.cleanZip(servletContext);
        return null;
    }

    private boolean isActiveUser(HttpServletRequest request){
        boolean answer = false;
        HttpSession session =  request.getSession();
        if (session.getAttribute("user") != null) {
            User user = (User)session.getAttribute("user");
            if (!user.getStatus().equals(User.INACTIVE)){
                answer = true;
            }
        }
        return answer;
    }


}